package com.dd.cloud.auth.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dd.cloud.auth.entity.AdminRole;
import com.dd.cloud.auth.entity.RoleMenu;
import com.dd.cloud.auth.req.role.*;


import java.util.List;

/**
 * @author zk
 */
public interface IAdminPowerService {
    /**
     * 查询树形菜单
     *
     * @param flag
     * @return
     */
    List<RoleMenu> queryMenuTree(Integer flag);

    /**
     * 查询所有菜单 通过场景
     *
     * @param flag
     * @return
     */
    List<RoleMenu> getRoleMenuByType(Integer flag);

    /**
     * 查询菜单通过菜单编号
     *
     * @param id
     * @return
     */
    RoleMenu queryMenuById(Integer id);

    /**
     * 修改菜单
     *
     * @param rm
     */
    void updateRoleMenu(RoleMenuUpdateReq rm);

    /**
     * 添加系统管理菜单
     *
     * @param rm
     */
    void addRoleMenu(RoleMenuAddReq rm);

    /**
     * 修改角色
     *
     * @param req
     */
    void updateAdminRole(RoleUpdateReq req);

    /**
     * 添加角色
     *
     * @param req
     * @return
     */
    AdminRole addAdminRole(RoleCreateReq req);

    /**
     * 查询角色的菜单
     *
     * @param roleId
     * @return
     */
    List<RoleMenu> queryRoleMenuByRoleId(Integer roleId);

    /**
     * 查询管理员拥有的菜单
     *
     * @param flag
     * @param userId
     * @return
     */
    List<RoleMenu> queryUserMenus(Integer flag, Integer userId);

    /**
     * 查询管理员权限
     *
     * @param userId
     * @param url
     * @return
     */
    Integer queryRoleMenu(Integer userId, String url);

    /**
     * 查询机构管理员所有角色
     *
     * @return
     */
    List<AdminRole> queryAdminRoleListAll();

    /**
     * 查询机构管理员所有角色
     *
     * @param req
     * @return
     */
    IPage<AdminRole> queryAdminRoleList(RoleQueryTermsReq req);

    /**
     * 查询角色详情
     *
     * @param roleId
     * @return
     */
    AdminRole queryAdminRoleDetail(Integer roleId);

    /**
     * 给角色添加权限或删除权限
     *
     * @param ar
     * @return
     */
    boolean updateRolePower(AdminRole ar);

    /**
     * 查询角色是否是超管
     *
     * @param userId
     * @param flag
     * @return
     */
    Integer queryRoleIsAdmin(Integer userId, Integer flag);

    /**
     * 查询角色是否是超管
     *
     * @param roleId
     * @return
     */
    Integer queryRoleIsAdmin(Integer roleId);

    /**
     * 查询超管角色id
     *
     * @param type
     * @return
     */
    Integer queryAdminRoleId(Integer type);

    /**
     * 绑定角色
     *
     * @param userId
     * @param roleId
     */
    void bindUserRole(Integer userId, Integer roleId,Integer type, String roleName);

    /**
     * 获取用户的数据权限
     */
    List<String> getDataRoleByUser();

    /**
     * 查询用户角色信息
     * @param userId
     * @param type
     * @return UserRoleInfoDto
     */
    AdminRole queryRoleByUserId(Integer userId, Integer type);

}
